@@ -7,7 +7,7 @@ from jsonfield import JSONField  | 
            ||
| 7 | 7 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 8 | 8 | 
                 | 
            
| 9 | 9 | 
                from kodo.basemodels import LensmanTypeBoolMixin  | 
            
| 10 | 
                -from mch.models import SaleclerkInfo  | 
            |
| 10 | 
                +from mch.models import SaleclerkInfo, MaintenancemanInfo  | 
            |
| 11 | 11 | 
                from sales.models import SalesResponsibilityInfo  | 
            
| 12 | 12 | 
                 | 
            
| 13 | 13 | 
                 | 
            
                @@ -451,6 +451,47 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin):  | 
            ||
| 451 | 451 | 
                             saleclerk_info = saleclerk.data if saleclerk and saleclerk.is_auth else {}
               | 
            
| 452 | 452 | 
                else:  | 
            
| 453 | 453 | 
                             saleclerk_info = {}
               | 
            
| 454 | 
                +  | 
            |
| 455 | 
                +        return {
               | 
            |
| 456 | 
                + 'has_unionid': bool(self.unionid),  | 
            |
| 457 | 
                + 'user_id': self.user_id,  | 
            |
| 458 | 
                + 'name': self.name,  | 
            |
| 459 | 
                + 'username': self.username,  | 
            |
| 460 | 
                + 'nickname': self.nickname,  | 
            |
| 461 | 
                + 'avatar': self.avatar,  | 
            |
| 462 | 
                + 'phone': self.phone,  | 
            |
| 463 | 
                + 'subscribe': self.subscribe,  | 
            |
| 464 | 
                + 're_membercard': True if self.has_membercard and not self.memberusercardcode else False,  | 
            |
| 465 | 
                + 'has_membercard': self.has_membercard,  | 
            |
| 466 | 
                + 'membercardid': self.membercardid,  | 
            |
| 467 | 
                + 'memberusercardcode': self.memberusercardcode,  | 
            |
| 468 | 
                + 'cardList': self.cardList,  | 
            |
| 469 | 
                + 'saleclerk': bool(saleclerk_info),  | 
            |
| 470 | 
                + 'saleclerk_info': saleclerk_info,  | 
            |
| 471 | 
                + 'sr_info': self.srinfo(brand_id),  | 
            |
| 472 | 
                + # 会员信息  | 
            |
| 473 | 
                + 'integral': self.integral,  | 
            |
| 474 | 
                + 'freeze_integral': self.freeze_integral,  | 
            |
| 475 | 
                + 'shots_num': self.shots_num,  | 
            |
| 476 | 
                + 'level': self.level,  | 
            |
| 477 | 
                + }  | 
            |
| 478 | 
                +  | 
            |
| 479 | 
                + def brand_qydata(self, brand_id=None):  | 
            |
| 480 | 
                + if self.phone:  | 
            |
| 481 | 
                + try:  | 
            |
| 482 | 
                + saleclerk = SaleclerkInfo.objects.get(brand_id=brand_id, clerk_phone=self.phone, status=True)  | 
            |
| 483 | 
                + except SaleclerkInfo.DoesNotExist:  | 
            |
| 484 | 
                + saleclerk = None  | 
            |
| 485 | 
                +            saleclerk_info = saleclerk.data if saleclerk and saleclerk.is_auth else {}
               | 
            |
| 486 | 
                + else:  | 
            |
| 487 | 
                +            saleclerk_info = {}
               | 
            |
| 488 | 
                +  | 
            |
| 489 | 
                + try:  | 
            |
| 490 | 
                + maintenance = MaintenancemanInfo.objects.get(brand_id=brand_id, user_id=self.user_id, status=True)  | 
            |
| 491 | 
                + except SaleclerkInfo.DoesNotExist:  | 
            |
| 492 | 
                +            maintenance = {}
               | 
            |
| 493 | 
                +  | 
            |
| 494 | 
                +        maintenance_info = maintenance.data if maintenance else {}
               | 
            |
| 454 | 495 | 
                         return {
               | 
            
| 455 | 496 | 
                'has_unionid': bool(self.unionid),  | 
            
| 456 | 497 | 
                'user_id': self.user_id,  | 
            
                @@ -474,7 +515,8 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin):  | 
            ||
| 474 | 515 | 
                'shots_num': self.shots_num,  | 
            
| 475 | 516 | 
                'level': self.level,  | 
            
| 476 | 517 | 
                # 维修员信息  | 
            
| 477 | 
                - 'is_maintenance': self.is_maintenance,  | 
            |
| 518 | 
                + 'is_maintenance': bool(maintenance_info),  | 
            |
| 519 | 
                + 'maintenance': maintenance_info,  | 
            |
| 478 | 520 | 
                }  | 
            
| 479 | 521 | 
                 | 
            
| 480 | 522 | 
                @property  | 
            
                @@ -10,7 +10,7 @@ from pysnippets.strsnippets import strip  | 
            ||
| 10 | 10 | 
                 | 
            
| 11 | 11 | 
                from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, CameraModelInfo, ConsumeInfoSubmitLogInfo,  | 
            
| 12 | 12 | 
                DistributorInfo, LatestAppInfo, LatestAppScreenInfo, ModelCameraBodyInfo, ModelInfo,  | 
            
| 13 | 
                - OperatorInfo, SaleclerkInfo)  | 
            |
| 13 | 
                + OperatorInfo, SaleclerkInfo, MaintenancemanInfo)  | 
            |
| 14 | 14 | 
                from utils.redis.rshot import update_member_shot_data  | 
            
| 15 | 15 | 
                 | 
            
| 16 | 16 | 
                 | 
            
                @@ -161,6 +161,11 @@ class SaleclerkInfoAdmin(AdvancedExportExcelModelAdmin, AdvancedActionsModelAdmi  | 
            ||
| 161 | 161 | 
                     search_fields = ('brand_id', 'brand_name', 'distributor_id', 'distributor_name', 'clerk_id', 'clerk_name', 'clerk_phone', 'unionid', 'openid')
               | 
            
| 162 | 162 | 
                     actions_exclude = ('delete_selected', )
               | 
            
| 163 | 163 | 
                 | 
            
| 164 | 
                +class MaintenancemanInfoAdmin(AdvancedExportExcelModelAdmin, AdvancedActionsModelAdmin, admin.ModelAdmin):  | 
            |
| 165 | 
                +    list_display = ('brand_name', 'wx_userid', 'maintenance_id', 'maintenance_name', 'maintenance_phone', 'status', 'created_at', 'updated_at')
               | 
            |
| 166 | 
                +    search_fields = ('maintenance_id', 'maintenance_name', 'maintenance_phone')
               | 
            |
| 167 | 
                +    actions_exclude = ('delete_selected', )
               | 
            |
| 168 | 
                +  | 
            |
| 164 | 169 | 
                 | 
            
| 165 | 170 | 
                class BrandModelDistributorPriceInfoAdmin(admin.ModelAdmin):  | 
            
| 166 | 171 | 
                     list_display = ('brand_id', 'brand_name', 'model_id', 'model_name', 'distributor_id', 'distributor_name', 'factory_yuan', 'integral', 'status', 'created_at', 'updated_at')
               | 
            
                @@ -247,3 +252,4 @@ admin.site.register(LatestAppInfo, LatestAppInfoAdmin)  | 
            ||
| 247 | 252 | 
                admin.site.register(LatestAppScreenInfo, LatestAppScreenInfoAdmin)  | 
            
| 248 | 253 | 
                admin.site.register(ConsumeInfoSubmitLogInfo, ConsumeInfoSubmitLogInfoAdmin)  | 
            
| 249 | 254 | 
                admin.site.register(ActivityInfo, ActivityInfoAdmin)  | 
            
| 255 | 
                +admin.site.register(MaintenancemanInfo, MaintenancemanInfoAdmin)  | 
            
                @@ -0,0 +1,56 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +# Generated by Django 1.11.26 on 2020-06-02 06:03  | 
            |
| 3 | 
                +from __future__ import unicode_literals  | 
            |
| 4 | 
                +  | 
            |
| 5 | 
                +from django.db import migrations, models  | 
            |
| 6 | 
                +import shortuuidfield.fields  | 
            |
| 7 | 
                +  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                +class Migration(migrations.Migration):  | 
            |
| 10 | 
                +  | 
            |
| 11 | 
                + dependencies = [  | 
            |
| 12 | 
                +        ('mch', '0056_auto_20200601_1640'),
               | 
            |
| 13 | 
                + ]  | 
            |
| 14 | 
                +  | 
            |
| 15 | 
                + operations = [  | 
            |
| 16 | 
                + migrations.CreateModel(  | 
            |
| 17 | 
                + name='MaintenancemanInfo',  | 
            |
| 18 | 
                + fields=[  | 
            |
| 19 | 
                +                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
               | 
            |
| 20 | 
                +                ('status', models.BooleanField(db_index=True, default=True, help_text='Status', verbose_name='status')),
               | 
            |
| 21 | 
                +                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
               | 
            |
| 22 | 
                +                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
               | 
            |
| 23 | 
                +                ('sex', models.IntegerField(choices=[(0, '\u672a\u77e5'), (1, '\u7537'), (2, '\u5973')], db_index=True, default=0, help_text='Sex', verbose_name='sex')),
               | 
            |
| 24 | 
                +                ('brand_id', models.CharField(blank=True, db_index=True, help_text='\u54c1\u724c\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='brand_id')),
               | 
            |
| 25 | 
                +                ('brand_name', models.CharField(blank=True, help_text='\u54c1\u724c\u540d\u79f0', max_length=255, null=True, verbose_name='brand_name')),
               | 
            |
| 26 | 
                +                ('user_id', models.CharField(blank=True, db_index=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, unique=True, verbose_name='user_id')),
               | 
            |
| 27 | 
                +                ('wx_userid', models.CharField(blank=True, db_index=True, help_text='\u4f01\u4e1a\u5fae\u4fe1 user_id', max_length=32, null=True, verbose_name='wx_userid')),
               | 
            |
| 28 | 
                +                ('maintenance_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='\u7ef4\u4fee\u5458\u552f\u4e00\u6807\u8bc6', max_length=22, unique=True)),
               | 
            |
| 29 | 
                +                ('maintenance_name', models.CharField(blank=True, help_text='\u7ef4\u4fee\u5458\u540d\u79f0', max_length=32, null=True, verbose_name='maintenance_name')),
               | 
            |
| 30 | 
                +                ('maintenance_sex', models.IntegerField(choices=[(0, '\u672a\u77e5'), (1, '\u7537'), (2, '\u5973')], db_index=True, default=1, help_text='\u7ef4\u4fee\u5458\u6027\u522b', verbose_name='maintenance_sex')),
               | 
            |
| 31 | 
                +                ('maintenance_phone', models.CharField(blank=True, help_text='\u7ef4\u4fee\u5458\u8054\u7cfb\u7535\u8bdd', max_length=11, null=True, unique=True, verbose_name='maintenance_phone')),
               | 
            |
| 32 | 
                + ],  | 
            |
| 33 | 
                +            options={
               | 
            |
| 34 | 
                + 'verbose_name': '\u7ef4\u4fee\u5458\u4fe1\u606f',  | 
            |
| 35 | 
                + 'verbose_name_plural': '\u7ef4\u4fee\u5458\u4fe1\u606f\u4fe1\u606f',  | 
            |
| 36 | 
                + },  | 
            |
| 37 | 
                + ),  | 
            |
| 38 | 
                + migrations.AddField(  | 
            |
| 39 | 
                + model_name='saleclerkinfo',  | 
            |
| 40 | 
                + name='user_id',  | 
            |
| 41 | 
                + field=models.CharField(blank=True, db_index=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='user_id'),  | 
            |
| 42 | 
                + ),  | 
            |
| 43 | 
                + migrations.AlterField(  | 
            |
| 44 | 
                + model_name='saleclerkinfo',  | 
            |
| 45 | 
                + name='clerk_phone',  | 
            |
| 46 | 
                + field=models.CharField(blank=True, help_text='\u5e97\u5458\u8054\u7cfb\u7535\u8bdd', max_length=11, null=True, unique=True, verbose_name='clerk_phone'),  | 
            |
| 47 | 
                + ),  | 
            |
| 48 | 
                + migrations.AlterUniqueTogether(  | 
            |
| 49 | 
                + name='saleclerkinfo',  | 
            |
| 50 | 
                +            unique_together=set([('clerk_phone', 'brand_id')]),
               | 
            |
| 51 | 
                + ),  | 
            |
| 52 | 
                + migrations.AlterUniqueTogether(  | 
            |
| 53 | 
                + name='maintenancemaninfo',  | 
            |
| 54 | 
                +            unique_together=set([('maintenance_phone', 'brand_id')]),
               | 
            |
| 55 | 
                + ),  | 
            |
| 56 | 
                + ]  | 
            
                @@ -426,8 +426,9 @@ class SaleclerkInfo(BaseModelMixin, SexModelMixin):  | 
            ||
| 426 | 426 | 
                clerk_id = ShortUUIDField(_(u'clerk_id'), max_length=32, help_text=u'店员唯一标识', db_index=True, unique=True)  | 
            
| 427 | 427 | 
                clerk_name = models.CharField(_(u'clerk_name'), max_length=32, blank=True, null=True, help_text=u'店员名称')  | 
            
| 428 | 428 | 
                clerk_sex = models.IntegerField(_(u'clerk_sex'), choices=SexModelMixin.SEX_TUPLE, default=SexModelMixin.MALE, help_text=u'店员性别', db_index=True)  | 
            
| 429 | 
                - clerk_phone = models.CharField(_(u'clerk_phone'), max_length=11, blank=True, null=True, help_text=u'店员联系电话')  | 
            |
| 429 | 
                + clerk_phone = models.CharField(_(u'clerk_phone'), max_length=11, blank=True, null=True, help_text=u'店员联系电话', unique=True)  | 
            |
| 430 | 430 | 
                 | 
            
| 431 | 
                + user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)  | 
            |
| 431 | 432 | 
                unionid = models.CharField(_(u'unionid'), max_length=32, blank=True, null=True, help_text=u'微信 UnionID', db_index=True)  | 
            
| 432 | 433 | 
                openid = models.CharField(_(u'openid'), max_length=32, blank=True, null=True, help_text=u'微信 OpenID', db_index=True)  | 
            
| 433 | 434 | 
                wx_userid = models.CharField(_(u'wx_userid'), max_length=32, blank=True, null=True, help_text=u'企业微信 user_id', db_index=True)  | 
            
                @@ -451,7 +452,7 @@ class SaleclerkInfo(BaseModelMixin, SexModelMixin):  | 
            ||
| 451 | 452 | 
                verbose_name_plural = _(u'经销商销售员信息')  | 
            
| 452 | 453 | 
                 | 
            
| 453 | 454 | 
                unique_together = (  | 
            
| 454 | 
                -            ('unionid', 'brand_id'),
               | 
            |
| 455 | 
                +            ('clerk_phone', 'brand_id'),
               | 
            |
| 455 | 456 | 
                )  | 
            
| 456 | 457 | 
                 | 
            
| 457 | 458 | 
                def __unicode__(self):  | 
            
                @@ -477,6 +478,36 @@ class SaleclerkInfo(BaseModelMixin, SexModelMixin):  | 
            ||
| 477 | 478 | 
                 | 
            
| 478 | 479 | 
                data = admindata  | 
            
| 479 | 480 | 
                 | 
            
| 481 | 
                +class MaintenancemanInfo(BaseModelMixin, SexModelMixin):  | 
            |
| 482 | 
                + brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)  | 
            |
| 483 | 
                + brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')  | 
            |
| 484 | 
                +  | 
            |
| 485 | 
                + user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True, unique=True)  | 
            |
| 486 | 
                + wx_userid = models.CharField(_(u'wx_userid'), max_length=32, blank=True, null=True, help_text=u'企业微信 user_id', db_index=True)  | 
            |
| 487 | 
                +  | 
            |
| 488 | 
                + maintenance_id = ShortUUIDField(_(u'maintenance_id'), max_length=32, help_text=u'维修员唯一标识', db_index=True, unique=True)  | 
            |
| 489 | 
                + maintenance_name = models.CharField(_(u'maintenance_name'), max_length=32, blank=True, null=True, help_text=u'维修员名称')  | 
            |
| 490 | 
                + maintenance_sex = models.IntegerField(_(u'maintenance_sex'), choices=SexModelMixin.SEX_TUPLE, default=SexModelMixin.MALE, help_text=u'维修员性别', db_index=True)  | 
            |
| 491 | 
                + maintenance_phone = models.CharField(_(u'maintenance_phone'), max_length=11, blank=True, null=True, help_text=u'维修员联系电话', unique=True)  | 
            |
| 492 | 
                +  | 
            |
| 493 | 
                + class Meta:  | 
            |
| 494 | 
                + verbose_name = _(u'维修员信息')  | 
            |
| 495 | 
                + verbose_name_plural = _(u'维修员信息信息')  | 
            |
| 496 | 
                +  | 
            |
| 497 | 
                + unique_together = (  | 
            |
| 498 | 
                +            ('maintenance_phone', 'brand_id'),
               | 
            |
| 499 | 
                + )  | 
            |
| 500 | 
                +  | 
            |
| 501 | 
                + def __unicode__(self):  | 
            |
| 502 | 
                + return unicode(self.pk)  | 
            |
| 503 | 
                +  | 
            |
| 504 | 
                + @property  | 
            |
| 505 | 
                + def data(self):  | 
            |
| 506 | 
                +        return  {
               | 
            |
| 507 | 
                + 'maintenance_id': self.maintenance_id,  | 
            |
| 508 | 
                + 'maintenance_name': self.maintenance_name,  | 
            |
| 509 | 
                + 'maintenance_phone': self.maintenance_phone,  | 
            |
| 510 | 
                + }  | 
            |
| 480 | 511 | 
                 | 
            
| 481 | 512 | 
                class BrandModelDistributorPriceInfo(BaseModelMixin):  | 
            
| 482 | 513 | 
                brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)  | 
            
                @@ -1,6 +1,8 @@  | 
            ||
| 1 | 1 | 
                # -*- coding: utf-8 -*-  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                import logging  | 
            
| 4 | 
                +import requests  | 
            |
| 5 | 
                +import json  | 
            |
| 4 | 6 | 
                 | 
            
| 5 | 7 | 
                from django.conf import settings  | 
            
| 6 | 8 | 
                from django.db import transaction  | 
            
                @@ -9,16 +11,17 @@ from django_logit import logit  | 
            ||
| 9 | 11 | 
                from django_response import response  | 
            
| 10 | 12 | 
                from ipaddr import client_ip  | 
            
| 11 | 13 | 
                from pyqywe_miniapp import get_userid  | 
            
| 14 | 
                +from pyqywe_token import access_token  | 
            |
| 12 | 15 | 
                from pywe_storage import RedisStorage  | 
            
| 13 | 16 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 14 | 17 | 
                 | 
            
| 15 | 18 | 
                from account.models import UserInfo  | 
            
| 19 | 
                +from mch.models import SaleclerkInfo, DistributorInfo, MaintenancemanInfo  | 
            |
| 16 | 20 | 
                from statistic.models import RegisterStatisticInfo  | 
            
| 17 | 
                -from utils.error.errno_utils import ProductBrandStatusCode  | 
            |
| 21 | 
                +from utils.error.errno_utils import ProductBrandStatusCode, ProductDistributorStatusCode  | 
            |
| 18 | 22 | 
                from utils.redis.connect import r  | 
            
| 19 | 23 | 
                from utils.redis.rprofile import set_profile_info  | 
            
| 20 | 24 | 
                 | 
            
| 21 | 
                -  | 
            |
| 22 | 25 | 
                WECHAT = settings.WECHAT  | 
            
| 23 | 26 | 
                 logger = logging.getLogger('logit')
               | 
            
| 24 | 27 | 
                 | 
            
                @@ -41,6 +44,13 @@ def qy_login_api(request):  | 
            ||
| 41 | 44 | 
                 | 
            
| 42 | 45 | 
                userid = get_userid(appid=appid, secret=secret, code=code, storage=RedisStorage(r))  | 
            
| 43 | 46 | 
                 | 
            
| 47 | 
                + token = access_token(appid=appid, secret=secret, storage=RedisStorage(r))  | 
            |
| 48 | 
                +  | 
            |
| 49 | 
                + userinfo = requests.post(url='https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token='+token+'&userid='+userid).text  | 
            |
| 50 | 
                + userinfo = json.loads(userinfo)  | 
            |
| 51 | 
                +  | 
            |
| 52 | 
                +    mobile = userinfo.get('mobile', '')
               | 
            |
| 53 | 
                +  | 
            |
| 44 | 54 | 
                # Get or Create User  | 
            
| 45 | 55 | 
                user, created = UserInfo.objects.select_for_update().get_or_create(appid=appid, userid=userid)  | 
            
| 46 | 56 | 
                 | 
            
                @@ -61,10 +71,42 @@ def qy_login_api(request):  | 
            ||
| 61 | 71 | 
                user.user_status = UserInfo.ACTIVATED  | 
            
| 62 | 72 | 
                user.signup_ip = client_ip(request)  | 
            
| 63 | 73 | 
                user.signup_at = tc.utc_datetime()  | 
            
| 64 | 
                - user.is_maintenance = userid in settings.QY_MAINTENANCE_USERID  | 
            |
| 74 | 
                + user.phone = mobile  | 
            |
| 65 | 75 | 
                user.save()  | 
            
| 66 | 76 | 
                 | 
            
| 67 | 77 | 
                # Store Userinfo  | 
            
| 68 | 78 | 
                set_profile_info(user)  | 
            
| 69 | 79 | 
                 | 
            
| 70 | 
                - return response(200, 'Mini App Login Success', u'微信小程序登录成功', user.brandata(brand_id=brand_id))  | 
            |
| 80 | 
                + # 维修员登录 (122 维修部部门ID)  | 
            |
| 81 | 
                +    if 122 in userinfo.get('department', []):
               | 
            |
| 82 | 
                + maintenance, created = MaintenancemanInfo.objects.get_or_create(brand_id=brand_id, maintenance_phone=mobile, status=True)  | 
            |
| 83 | 
                +  | 
            |
| 84 | 
                + if created:  | 
            |
| 85 | 
                +            maintenance.maintenance_name = userinfo.get('name', '')
               | 
            |
| 86 | 
                +            maintenance.maintenance_sex = userinfo.get('gender', 0)
               | 
            |
| 87 | 
                + maintenance.maintenance_phone = mobile  | 
            |
| 88 | 
                + maintenance.user_id = user.user_id  | 
            |
| 89 | 
                + maintenance.save()  | 
            |
| 90 | 
                + else:  | 
            |
| 91 | 
                + # 销售员登录  | 
            |
| 92 | 
                + saleclerk, created = SaleclerkInfo.objects.get_or_create(brand_id=brand_id, clerk_phone=mobile, status=True)  | 
            |
| 93 | 
                +  | 
            |
| 94 | 
                + if created:  | 
            |
| 95 | 
                + try:  | 
            |
| 96 | 
                +                distributor = DistributorInfo.objects.get(department_id__in=userinfo.get('department', []))
               | 
            |
| 97 | 
                + except:  | 
            |
| 98 | 
                + return response(ProductDistributorStatusCode.DISTRIBUTOR_NOT_FOUND)  | 
            |
| 99 | 
                +  | 
            |
| 100 | 
                + saleclerk.brand_id = brand_id  | 
            |
| 101 | 
                + saleclerk.distributor_id = distributor.distributor_id  | 
            |
| 102 | 
                + saleclerk.distributor_name = distributor.distributor_name  | 
            |
| 103 | 
                +            saleclerk.clerk_name = userinfo.get('name', '')
               | 
            |
| 104 | 
                +            saleclerk.sex = userinfo.get('gender', 0)
               | 
            |
| 105 | 
                +            saleclerk.clerk_phone = userinfo.get('mobile', '')
               | 
            |
| 106 | 
                + saleclerk.user_id = user.user_id  | 
            |
| 107 | 
                + saleclerk.wx_userid = userid  | 
            |
| 108 | 
                + saleclerk.user_status = SaleclerkInfo.ACTIVATED  | 
            |
| 109 | 
                + saleclerk.is_auth = True  | 
            |
| 110 | 
                + saleclerk.save()  | 
            |
| 111 | 
                +  | 
            |
| 112 | 
                + return response(200, 'Mini App Login Success', u'微信小程序登录成功', user.brand_qydata(brand_id=brand_id))  |